package com.um2.mauction.java;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.upload.FormFile;

import com.um2.mauction.entity.Produit;
import com.um2.mauction.session.impl.AjoutProduitStatefulBean;
import com.um2.mauction.session.remote.AjoutProduitStatefulRemote;

public class FrmAjoutProduitParticulier1Action extends Action 
{
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	throws IOException, ServletException 
	{
		ActionForward resultat = mapping.findForward("success");
		ActionErrors errors = new ActionErrors();

		// Stateful bean
		AjoutProduitStatefulRemote ajoutprod=null;

		// Récuparation données du bean
		FrmAjoutProduitParticulier1Bean formulaire = (FrmAjoutProduitParticulier1Bean) form;

		String nomProduit = (String) formulaire.get("txtNomProduit");
		String typeProduit = (String) formulaire.get("cmbTypeProduit");
		System.out.println("CAT: " + typeProduit );
		String etatProduit = (String) formulaire.get("cmbEtatProduit");
		FormFile photoProduit = (FormFile) formulaire.get("txtPhoto");
		String descProduit = (String) formulaire.get("txtDescProduit");

		// recuperation de la photo

		//String contentType = photoProduit.getContentType();
		// Get the file name

		String fileName = photoProduit.getFileName();

		//byte[] fileData = photoProduit.getFileData();

		// Get the servers upload directory real path name
		String filePath = getServlet().getServletContext().getRealPath("/");

		System.out.println("fp" + filePath);

		/* Save file on the server */
		if (!fileName.equals("")) 
		{
			System.out.println("Server path:" + filePath);
			// Create file
			File fileToCreate = new File(filePath, fileName);
			// If file does not exists create file
			if (!fileToCreate.exists())
			{
				FileOutputStream fileOutStream = new FileOutputStream(
						fileToCreate);
				fileOutStream.write(photoProduit.getFileData());
				fileOutStream.flush();
				fileOutStream.close();
			}
		}
		// Set file name to the request object
		request.setAttribute("fileName", fileName);

		try 
		{
			InitialContext ic = new InitialContext();

			ajoutprod = (AjoutProduitStatefulRemote) ic.lookup(AjoutProduitStatefulBean.RemoteJNDIName);

			HttpSession session = request.getSession();		
			session.setAttribute("ajoutprod",ajoutprod);

			if(ajoutprod==null)
			{
				errors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage("ajoutprod.statefulBean.null"));
				resultat = new ActionForward(mapping.getInput());
			}
			else
			{		
				Produit prod = new  Produit(nomProduit,filePath,descProduit,etatProduit,null,null);
				ajoutprod.setSeller_id(1);
				ajoutprod.setProduit(prod);
				ajoutprod.setCategorie(Integer.parseInt(typeProduit));
			}
		} 
		catch(NamingException e)
		{
			errors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage("ajoutprod.statefulBean.notBound"));
			resultat = new ActionForward(mapping.getInput());
		}

		if (!errors.isEmpty()) 
			saveErrors(request, errors);		
		return resultat;		
	}
}